Flutter StatefulWidget
StatefulWidget
是 Flutter 中的一种特殊组件,它可以在运行时保持可变状态。了解其生命周期是优化应用性能和正确管理状态的关键。
生命周期
状态机如下:
StatefulWidget 生命周期
构造函数
StatefulWidget 的 constructor: 构造函数首先被调用,用于初始化 StatefulWidget 的关键参数。
createState
StatefulWidget 的 createState()
: 当框架需要构建 StatefulWidget 时,该方法会被调用。它返回一个新的 State 对象,这个对象会在组件的整个生命周期中持续存在。
State 生命周期
initState
initState()
: 当 State 对象被创建后,这个方法会立即被调用。通常用于执行一次性的初始化操作。
didChangeDependencies
当 State 的依赖变化时被调用。
举例:运行的 build() 方法中包含一个 InheritedWidget,会将 State 与这个 InheritedWidget 建立依赖关系,后续当 InheritedWidget 变化时,会调用 didChangeDependencies 作为通知回调。
另外,在 initState()
后和首次 build()
之前调用,也会被调用。
构建和更新
build
build()
: 返回一个新的组件树。当设置状态 (setState()
) 被调用或其他可能导致 UI 更新的操作发生时,该方法会被重新调用。
reassemble
在 Debug 模式下,每次 Hot reload 都会调用这个方法。
didUpdateWidget
当组件的参数发生变化时被调用的方法.
所谓参数发生变化,具体指以下触发场景:
-
父组件重建场景:当父组件重建时,可能会创建一个当前 StatefulWidget 类的新实例。但是,尽管外部的 StatefulWidget 实例是新的,但内部关联的 State 对象却不会被重新创建。Flutter 框架设计如此是为了保持组件的状态持续性。因此,当新的 StatefulWidget 实例与已存在的 State 对象关联时,
didUpdateWidget
方法会被调用,以便你可以对新旧参数进行比较并进行必要的状态调整。 -
参数变化:当 StatefulWidget 的父组件为其传递新的参数时,
didUpdateWidget
会被调用。在这个方法内,您可以对旧的StatefulWidget
实例 (oldWidget
) 和当前的StatefulWidget
实例进行比较,以确定哪些参数发生了变化。
应用:简单的状态管理
可以基于 didUpdateWidget
实现简单的状态管理,父组件状态通过组件参数方式传入,当父组件状态变化时,触发参数变化场景,子组件在 didUpdateWidget
回调中实现对子组件内部状态的同步。
State 的移除和销毁
deactivate
当 State 对象从树中被移除时,该方法会被调用。
注意,deactivate 不代表组件销毁,该 Widget 还有可能被重新挂载到树上。
dispose
表示对象永久从组件树中移除,需要进行执行清理操作,如取消监听器或定时器。
本文作者:Maeiee
版权声明:如无特别声明,本文即为原创文章,版权归 Maeiee 所有,未经允许不得转载!
喜欢我文章的朋友请随缘打赏,鼓励我创作更多更好的作品!